/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package agb.Modelo;

import agb.Conexion.Conexion;
import java.sql.*;
import java.util.ArrayList;
import java.util.Vector;

/**
 *
 * @author Administrator
 */
public class Publicaciones {
    private int codigo;
    private String titulo, tema, autor, editorial, edicion, resumen, archivo, 
            fecha, tipo;

    /**
     * @return the codigo
     */
    public int getCodigo() {
        return codigo;
    }

    /**
     * @param codigo the codigo to set
     */
    public void setCodigo(int codigo) {
        this.codigo = codigo;
    }

    /**
     * @return the titulo
     */
    public String getTitulo() {
        return titulo;
    }

    /**
     * @param titulo the titulo to set
     */
    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }

    /**
     * @return the tema
     */
    public String getTema() {
        return tema;
    }

    /**
     * @param tema the tema to set
     */
    public void setTema(String tema) {
        this.tema = tema;
    }

    /**
     * @return the autor
     */
    public String getAutor() {
        return autor;
    }

    /**
     * @param autor the autor to set
     */
    public void setAutor(String autor) {
        this.autor = autor;
    }

    /**
     * @return the editorial
     */
    public String getEditorial() {
        return editorial;
    }

    /**
     * @param editorial the editorial to set
     */
    public void setEditorial(String editorial) {
        this.editorial = editorial;
    }

    /**
     * @return the edicion
     */
    public String getEdicion() {
        return edicion;
    }

    /**
     * @param edicion the edicion to set
     */
    public void setEdicion(String edicion) {
        this.edicion = edicion;
    }

    /**
     * @return the resumen
     */
    public String getResumen() {
        return resumen;
    }

    /**
     * @param resumen the resumen to set
     */
    public void setResumen(String resumen) {
        this.resumen = resumen;
    }

    /**
     * @return the archivo
     */
public String getArchivo() {
        return archivo;
    }

    /**
     * @param archivo the archivo to set
     */
    public void setArchivo(String archivo) {
        this.archivo = archivo;
    }

    /**
     * @return the fecha
     */
    public String getFecha() {
        return fecha;
    }

    /**
     * @param fecha the fecha to set
     */
    public void setFecha(String fecha) {
        this.fecha = fecha;
    }

    public static ArrayList<Publicaciones>  listaPublicacionesLibros(int tipo, String busqueda){
        Publicaciones oPublicacion = null;
        ArrayList<Publicaciones> LPublicaciones = new ArrayList<Publicaciones>();
        Connection cn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sql = "SELECT P.cod_publicacion, UPPER(P.titulo_publicacion), " +
                "UPPER(P.tema_publicacion), UPPER(P.autor_publicacion),UPPER(T.nombre_tipo) " +
                "FROM publicacion P " +
                "INNER join publicacion_tipo T ON P.cod_tipo = T.cod_tipo " +
                "WHERE T.cod_tipo = 1 AND " ;
        if(tipo==0){
            sql += "(P.titulo_publicacion like UPPER(?) ||" + "'%'" + "OR P.titulo_publicacion like ? ||" + "'%')";
        }else{
            if(tipo==1){
                sql += "(P.tema_publicacion like UPPER(?) ||" + "'%'" + "OR P.tema_publicacion like ? ||" + "'%')";
            }else{
                sql += "(P.autor_publicacion like UPPER(?) ||" + "'%'" + "OR P.autor_publicacion like ? ||" + "'%')";
            }
        }
        try{
            cn = Conexion.getConexion();
            ps = cn.prepareStatement(sql);
            ps.setString(1, busqueda);
            ps.setString(2, busqueda);
            rs = ps.executeQuery();
            while(rs.next()){
                oPublicacion = new  Publicaciones();
                oPublicacion.setCodigo(rs.getInt(1));
                oPublicacion.setTitulo(rs.getString(2));
                oPublicacion.setTema(rs.getString(3));
                oPublicacion.setAutor(rs.getString(4));
                oPublicacion.setTipo(rs.getString(5));
                LPublicaciones.add(oPublicacion);
            }
        Conexion.cerrarPreparedStatement(ps);
        Conexion.cerrarConexion(cn);
        }catch(SQLException ex){
            ex.printStackTrace();
            Conexion.cerrarPreparedStatement(ps);
            Conexion.cerrarConexion(cn);
        }catch(Exception ex){
            ex.printStackTrace();
        }
        return LPublicaciones;
    }

    public static ArrayList<Publicaciones>  listaPublicacionesRevistas(int tipo, String busqueda){
        Publicaciones oPublicacion = null;
        ArrayList<Publicaciones> LPublicaciones = new ArrayList<Publicaciones>();
        Connection cn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sql = "SELECT P.cod_publicacion, UPPER(P.titulo_publicacion), " +
                "UPPER(P.tema_publicacion), UPPER(P.autor_publicacion),UPPER(T.nombre_tipo) " +
                "FROM publicacion P " +
                "INNER join publicacion_tipo T ON P.cod_tipo = T.cod_tipo " +
                "WHERE T.cod_tipo = 2 AND " ;
        if(tipo==0){
            sql += "(P.titulo_publicacion like UPPER(?) ||" + "'%'" + "OR P.titulo_publicacion like ? ||" + "'%')";
        }else{
            if(tipo==1){
                sql += "(P.tema_publicacion like UPPER(?) ||" + "'%'" + "OR P.tema_publicacion like ? ||" + "'%')";
            }else{
                sql += "(P.autor_publicacion like UPPER(?) ||" + "'%'" + "OR P.autor_publicacion like ? ||" + "'%')";
            }
        }
        try{
            cn = Conexion.getConexion();
            ps = cn.prepareStatement(sql);
            ps.setString(1, busqueda);
            ps.setString(2, busqueda);
            rs = ps.executeQuery();
            while(rs.next()){
                oPublicacion = new  Publicaciones();
                oPublicacion.setCodigo(rs.getInt(1));
                oPublicacion.setTitulo(rs.getString(2));
                oPublicacion.setTema(rs.getString(3));
                oPublicacion.setAutor(rs.getString(4));
                oPublicacion.setTipo(rs.getString(5));
                LPublicaciones.add(oPublicacion);
            }
        Conexion.cerrarPreparedStatement(ps);
        Conexion.cerrarConexion(cn);
        }catch(SQLException ex){
            ex.printStackTrace();
            Conexion.cerrarPreparedStatement(ps);
            Conexion.cerrarConexion(cn);
        }catch(Exception ex){
            ex.printStackTrace();
        }
        return LPublicaciones;
    }

        public static ArrayList<Publicaciones>  listaPublicacionesTrabajos(int tipo, String busqueda){
        Publicaciones oPublicacion = null;
        ArrayList<Publicaciones> LPublicaciones = new ArrayList<Publicaciones>();
        Connection cn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sql = "SELECT P.cod_publicacion, UPPER(P.titulo_publicacion), " +
                "UPPER(P.tema_publicacion), UPPER(P.autor_publicacion),UPPER(T.nombre_tipo) " +
                "FROM publicacion P " +
                "INNER join publicacion_tipo T ON P.cod_tipo = T.cod_tipo " +
                "WHERE T.cod_tipo = 3 AND " ;
        if(tipo==0){
            sql += "(P.titulo_publicacion like UPPER(?) ||" + "'%'" + "OR P.titulo_publicacion like ? ||" + "'%')";
        }else{
            if(tipo==1){
                sql += "(P.tema_publicacion like UPPER(?) ||" + "'%'" + "OR P.tema_publicacion like ? ||" + "'%')";
            }else{
                sql += "(P.autor_publicacion like UPPER(?) ||" + "'%'" + "OR P.autor_publicacion like ? ||" + "'%')";
            }
        }
        try{
            cn = Conexion.getConexion();
            ps = cn.prepareStatement(sql);
            ps.setString(1, busqueda);
            ps.setString(2, busqueda);
            rs = ps.executeQuery();
            while(rs.next()){
                oPublicacion = new  Publicaciones();
                oPublicacion.setCodigo(rs.getInt(1));
                oPublicacion.setTitulo(rs.getString(2));
                oPublicacion.setTema(rs.getString(3));
                oPublicacion.setAutor(rs.getString(4));
                oPublicacion.setTipo(rs.getString(5));
                LPublicaciones.add(oPublicacion);
            }
        Conexion.cerrarPreparedStatement(ps);
        Conexion.cerrarConexion(cn);
        }catch(SQLException ex){
            ex.printStackTrace();
            Conexion.cerrarPreparedStatement(ps);
            Conexion.cerrarConexion(cn);
        }catch(Exception ex){
            ex.printStackTrace();
        }
        return LPublicaciones;
    }

    public static Publicaciones  detallePublicaciones(int codPublicacion){
        Publicaciones  oPublicacion = new  Publicaciones();    
        Connection cn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sql = "SELECT P.titulo_publicacion, P.tema_publicacion, P.autor_publicacion, " +
                "P.editorial_publicacion, P.edicion_publicacion, P.resumen_publicacion, T.nombre_tipo " +
                "FROM PUBLICACION P " +
                "INNER JOIN publicacion_tipo T ON P.cod_tipo = T.cod_tipo " +
                "WHERE P.cod_publicacion = ? " ;

        try{
            cn = Conexion.getConexion();
            ps = cn.prepareStatement(sql);
            ps.setInt(1, codPublicacion);
            rs = ps.executeQuery();
            while(rs.next()){
                           
                oPublicacion.setTitulo(rs.getString(1));
                oPublicacion.setTema(rs.getString(2));
                oPublicacion.setAutor(rs.getString(3));
                oPublicacion.setEditorial(rs.getString(4));
                oPublicacion.setEdicion(rs.getString(5));
                oPublicacion.setResumen(rs.getString(6));
                oPublicacion.setTipo(rs.getString(7));
            }
        Conexion.cerrarPreparedStatement(ps);
        Conexion.cerrarConexion(cn);
        }catch(SQLException ex){
            ex.printStackTrace();
            Conexion.cerrarPreparedStatement(ps);
            Conexion.cerrarConexion(cn);
        }catch(Exception ex){
            ex.printStackTrace();
        }
        return oPublicacion;
    }

     public static ArrayList<Publicaciones>  listaDescargas(int tipo){
        Publicaciones oPublicacion = null;
        ArrayList<Publicaciones> LPublicaciones = new ArrayList<Publicaciones>();
        Connection cn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        String sql = "SELECT UPPER(P.titulo_publicacion), UPPER(P.resumen_publicacion), " +
                "P.archivo_publicacion " +
                "FROM publicacion P " +
                "INNER join publicacion_tipo T ON P.cod_tipo = T.cod_tipo " +
                "WHERE T.cod_tipo = ? AND (P.fecha_publicacion < current_date " +
                "OR P.fecha_publicacion IS NULL) " ;
        try{
            cn = Conexion.getConexion();
            ps = cn.prepareStatement(sql);
            ps.setInt(1, tipo);
            rs = ps.executeQuery();
            while(rs.next()){
                oPublicacion = new  Publicaciones();                
                oPublicacion.setTitulo(rs.getString(1));
                oPublicacion.setResumen(rs.getString(2)+"");
                oPublicacion.setArchivo(rs.getString(3));
                LPublicaciones.add(oPublicacion);
            }
        Conexion.cerrarPreparedStatement(ps);
        Conexion.cerrarConexion(cn);
        }catch(SQLException ex){
            ex.printStackTrace();
            Conexion.cerrarPreparedStatement(ps);
            Conexion.cerrarConexion(cn);
        }catch(Exception ex){
            ex.printStackTrace();
        }
        return LPublicaciones;
    }

    /**
     * @return the tipo
     */
    public String getTipo() {
        return tipo;
    }

    /**
     * @param tipo the tipo to set
     */
    public void setTipo(String tipo) {
        this.tipo = tipo;
    }

}
